package cc.rengu.igas.bsps.core.realize;

import cc.rengu.igas.bsps.core.model.UserSessionInfo;

/**
 * 用户权限检查.
 */
public interface UserPermissionCheckService {

    /**
     * 检查商户用户权限
     *
     * @param instId  机构号
     * @param userId  用户信息
     * @param mchntNo 商户号
     * @param txnNum  交易码
     * @return 结果
     * @throws Exception 异常
     */
    boolean checkNormalUserPermission(String instId, String userId, String mchntNo, String txnNum, String appType) throws Exception;


    /**
     * 检查拓展经理权限
     *
     * @param instId 机构号
     * @param userId 用户ID
     * @param txnNum 交易码
     * @return 结果
     * @throws Exception 异常
     */
    boolean checkManagerUserPermission(String instId, String userId, String txnNum, String channelId) throws Exception;


    /**
     * 检查用户session
     *
     * @param instId    机构号
     * @param sessionId 会话id
     * @return 会话对象
     * @throws Exception
     */
    UserSessionInfo checkSessionStatus(String instId, String sessionId) throws Exception;

    /**
     * 检查登录状态下的session
     *
     * @param instId    机构号
     * @param sessionId 会话id
     * @param userId    用户号
     * @return 会话对象
     * @throws Exception
     */
    UserSessionInfo checkUserLoginSessionStatus(String instId, String sessionId, String userId) throws Exception;

    /**
     * 用户权限校验
     *
     * @param instId 机构号
     * @param userId 用户ID
     * @param txnNum 交易码
     * @return 结果
     * @throws Exception 异常
     */
    boolean checkUserPermission(String instId, String userId, String txnNum, String channelId) throws Exception;
}
